package com.athuahua.rector;

import org.junit.Test;
import reactor.core.publisher.Flux;
import reactor.core.scheduler.Schedulers;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @Author: huahua
 * @Date: 2024/11/4 0004
 * @Time: 15:46
 * @Description:
 */
public class FluxThreadDemo {
    //响应式编程：全异步 消息 事件回调
    //自定义线程调度
    @Test
    public void threadTest() {
        //不指定线程池情况下，默认发布者用的是订阅者的线程池 【流在订阅后才会流动】
        //流的发布，中间操作，默认使用当前线程，
        Flux.range(1, 10)
                .publishOn(Schedulers.single()) //设定发布者的调度策略
                .log()
                .subscribeOn(Schedulers.immediate()) //设定订阅者的调度策略
                .subscribe();

        //Schedulers 调度器【线程池】
        Schedulers.immediate(); //默认：无执行上下文，当前线程执行所有操作
        Schedulers.single(); //使用固定的一个单线程
        Schedulers.boundedElastic(); //有界，弹性调度、不是无限扩充的线程池
        Schedulers.parallel(); //并发池
        //自定义线程池
        Schedulers.fromExecutor(new ThreadPoolExecutor(4, 8, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1000)));


    }
}
